package org.framework.lazy.cloud.network.heartbeat.server.standalone.application;

import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.proxy.flow.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyProxyFlowDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.proxy.flow.LazyProxyFlow;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.web.response.Result;

import java.util.List;

/**
 * describe 代理流量
 *
 * @author Jia wei Wu
 * @date 2025/06/06 11:39 晚上
 * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication
 **/

public interface LazyProxyFlowApplication {


    /**
     * describe 新增代理流量
     *
     * @param lazyProxyFlowStoryCommand 新增代理流量
     * @return {@link Result<LazyProxyFlow>} 代理流量新增后领域对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyProxyFlow> story(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);

    /**
     * 流量增长存储
     *
     * @param lazyProxyFlowStoryCommand 代理流量
     */
    Result<LazyProxyFlow> flowIncreaseStory(LazyProxyFlowStoryCommand lazyProxyFlowStoryCommand);

    /**
     * describe 批量新增代理流量
     *
     * @param lazyProxyFlowStoryCommandList 批量新增代理流量
     * @return {@link Result<List<LazyProxyFlow>>} 代理流量新增后领域对象集合
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<List<LazyProxyFlow>> batchStory(List<LazyProxyFlowStoryCommand> lazyProxyFlowStoryCommandList);

    /**
     * describe 更新代理流量
     *
     * @param lazyProxyFlowUpdateCommand 更新代理流量
     * @return {@link Result<LazyProxyFlow>} 代理流量领域对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyProxyFlow> updateOne(LazyProxyFlowUpdateCommand lazyProxyFlowUpdateCommand);

    /**
     * describe 查询单个代理流量
     *
     * @param lazyProxyFlowQueryOneCommand 查询单个代理流量
     * @return {@link Result<LazyProxyFlowDTO>} 代理流量DTO对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyProxyFlowDTO> findOne(LazyProxyFlowQueryOneCommand lazyProxyFlowQueryOneCommand);

    /**
     * describe 查询多个代理流量
     *
     * @param lazyProxyFlowQueryListCommand 查询多个代理流量
     * @return {@link Result <List<LazyProxyFlowDTO>>} 代理流量DTO对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<List<LazyProxyFlowDTO>> findList(LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);

    /**
     * describe 分页查询多个代理流量
     *
     * @param lazyProxyFlowQueryListCommand 分页查询多个代理流量
     * @return {@link Result <LazyPage<LazyProxyFlowDTO>>} 分页代理流量DTO对象
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyPage<LazyProxyFlowDTO>> findPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);

    /**
     * describe 删除代理流量
     *
     * @param lazyProxyFlowRemoveCommand 删除代理流量
     * @return {@link Result<LazyProxyFlow>} 代理流量
     * @author Jia wei Wu
     * @date 2025/06/06 11:39 晚上
     **/

    Result<LazyProxyFlow> remove(LazyProxyFlowRemoveCommand lazyProxyFlowRemoveCommand);

    /**
     * 根据客户端查询流量
     *
     * @param size                          分页大小
     * @param current                       分页
     * @param lazyProxyFlowQueryListCommand 查询条件
     * @return {@link Result<LazyPage<    LazyClientProxyFlowDTO    >>} 分页访客端流量DTO对象
     */
    Result<LazyPage<LazyClientProxyFlowDTO>> findClientFlowPage(int size, int current, LazyProxyFlowQueryListCommand lazyProxyFlowQueryListCommand);


}